home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.12 Dec 90 / Simulation code / Distributions.m < prev    next >
Encoding:
Modula Implementation  |  1989-06-18  |  1.0 KB  |  44 lines  |  [TEXT/MPS ]

  1. (****************************************************)
  2. (*                                                    *)
  3. (*    file:  Distributions.m                            *)
  4. (*                                                    *)
  5. (*    See definition module for documentation of         *)
  6. (*    functions.                                         *)
  7. (*                                                    *)
  8. (*    Written in SemperSoft Modula-2 v.1.1.2            *)
  9. (*                                                    *)
  10. (*    Allen Stenger    May 1989                          *)
  11. (*                                                    *)
  12. (****************************************************)
  13. IMPLEMENTATION MODULE Distributions;
  14.  
  15. FROM MathLib0        IMPORT    ln;
  16. FROM InsideMac        IMPORT    Random;
  17.  
  18. PROCEDURE UniformZeroToOne() : REAL;
  19. BEGIN
  20.     RETURN( FLOAT(Random()) / 65534.0 + 0.5 )
  21. END UniformZeroToOne;
  22.  
  23. PROCEDURE UniformDistribution( 
  24.             start, end : CARDINAL ) : CARDINAL;
  25. BEGIN
  26.     RETURN( start 
  27.             + TRUNC((FLOAT(end - start) + 1.0) 
  28.                 * UniformZeroToOne()) );
  29. END UniformDistribution;
  30.  
  31. PROCEDURE ExponentialDistribution( 
  32.             mean : CARDINAL ) : CARDINAL;
  33. CONST
  34.     maxCard    =    FLOAT(MAX(CARDINAL));
  35. VAR
  36.     r    :    REAL;
  37. BEGIN
  38.     r := - FLOAT(mean) * ln( UniformZeroToOne() );
  39.     IF r > maxCard THEN r := maxCard END;
  40.     RETURN( TRUNC(r) ); 
  41. END ExponentialDistribution;
  42.  
  43. END Distributions.
  44.